package com.yunhe.dtu.util;

import com.alibaba.fastjson.JSONObject;
import com.yunhe.common.util.CollectionUtil;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

/**
 * @ClassName MapUtil
 * @Description 和map操作有关的工具方法
 * @Author HeTao
 * @Date 2020/11/17 11:02
 * @Version 1.0
 **/
public class MapUtil {

	/**
	 * 
	* @Title: convertJSONObject  
	* @Description: TODO(map转json)  
	* @param @param map
	* @param @return    设定文件  
	* @return JSONObject    返回类型  
	* @throws
	 */
	public static String MapToJson(Map<String,Object> map) {
		Object json =JSONObject.toJSON(map);
		return json.toString();
	}
	

	/**
	 * 
	* @Title: convertJSONObject  
	* @Description: TODO(map转json)  
	* @param @param map
	* @param @return    设定文件  
	* @return JSONObject    返回类型  
	* @throws
	 */
	public static Map<String, Object> JsonToMapNotNull(String json) {
		JSONObject temp = JSONObject.parseObject(json);
		Map<String, Object> res = temp == null ? new HashMap<String, Object>(): temp;
		return res;
	}
	
	/**
	* @Title: convertJSONObject  
	* @Description: TODO(组合map对象)  
	* @param @param map
	* @param @return    设定文件  
	* @return JSONObject    返回类型  
	* @throws
	 */
	public static void mergeMap(Map<String, Object> mainMap, Map<String, Object> partMap) {
		 for (Entry<String, Object> entry : partMap.entrySet()) {
			   String key = entry.getKey().toString();
			   String value = String.valueOf(entry.getValue());
			   mainMap.put(key,value);
		  }
	}

	/**
	 * @Title objectToMap
	 * @Description: todo map转对象
	 * @param @param map
	 * @param @return    设定文件
	 * @return Object    返回类型
	 * @throws
	 */

	public static <T> T mapToObejct(Map<String,Object> map, Class<T> beanClass) throws Exception{
		if(CollectionUtil.isEmpty(map)){
			return null;
		}
		T t = beanClass.newInstance();
        Field[] fields = t.getClass().getDeclaredFields();
        for (Field field : fields) {
            int mod = field.getModifiers();
            if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){
                continue;
            }
            //field.setAccessible(true);
			ReflectionUtils.makeAccessible(field);
            field.set(t,map.get(field.getName()));
        }
        return t;
    }
	
	
}


